-- HeroAnimation
-- Created by chengb Mar/2/2015
-- 冈布奥动画管理

-- 冈布奥动作类型
HERO_ACTION_IDLE       = 1;      -- 待机
HERO_ACTION_DAMAGED    = 2;      -- 受创
HERO_ACTION_ATTACK     = 3;      -- 攻击
HERO_ACTION_CAST_ME    = 4;      -- 对自身施法
HERO_ACTION_CAST_OTHER = 5;      -- 对他人施法
HERO_ACTION_SPEAK      = 6;      -- 说话

-- 所有的冈布奥动作类型
ALL_HERO_ACTIONS = {
    HERO_ACTION_IDLE,         -- 待机
    HERO_ACTION_DAMAGED,      -- 受创
    HERO_ACTION_ATTACK,       -- 攻击
    HERO_ACTION_CAST_ME,      -- 对自身施法
    HERO_ACTION_CAST_OTHER,   -- 对他人施法
    HERO_ACTION_SPEAK,        -- 说话
}

-- 当前动作类型
local currentActionType = HERO_ACTION_IDLE;

-- HeroAnimation继承自Node
HeroAnimation = class("HeroAnimation", function()
    return cc.Node:create();
end);

function HeroAnimation.create(filePath)
    return HeroAnimation.new(filePath);
end

-- 构造函数
function HeroAnimation:ctor(filePath)
    -- 载入动画
    local node, action = AnimationCacheM.createAnimationNodeAndAction(filePath);

    self.node = node;
    self.action = action;
    self.filePath = filePath;

    node:runAction(action);
    self:addChild(node);

    self.hasDestroyed = false;

    -- 界面析构后，需要清理下
    self:registerScriptHandler(function(eventType)
        if eventType == "exit" then
            self:destroy();
        end
    end);
end

-----------------------------
-- 播放
-- @param actionType   动作类型
-- @param loop         是否循环播放
-- @param startIndex   起始帧
-- @param endIndex     结束帧
-- @param speed        播放速度
function HeroAnimation:play(actionType, loop, startIndex, endIndex, speed)
    if nil == loop then
        loop = false;
    end

    if table.indexOf(ALL_HERO_ACTIONS, actionType) < 0 then
        cclog("无法播放冈布奥动作，未知的动作类型：%s", tostring(actionType));
        return;
    end

    -- 播放
    self.action:setTimeSpeed(speed);
    self.action:gotoFrameAndPlay(startIndex, endIndex, loop);
end

-- 暂停播放
function HeroAnimation:pause()
    self.action:pause();
end

-- 销毁动画
function HeroAnimation:destroy()
    if not self.hasDestroyed then
        self:removeChild(self.node);
        AnimationCacheM.freeAnimationNodeAndAction(self.filePath, self.node, self.action);
        self.hasDestroyed = true;

        self.node = nil;
        self.action = nil;
        self.filePath = nil;
    end
end

